home *** CD-ROM | disk | FTP | other *** search
- Subject: v07i043: 2.11 News Documentation and Conversion, Part03/08
- Newsgroups: mod.sources
- Approved: mirror!rs
-
- Submitted by: seismo!rick (Rick Adams)
- Mod.sources: Volume 7, Issue 43
- Archive-name: 2.11news/Part03
-
- # To extract, sh this file
- #
- # news 2.11 documentation File 1 of 6
- #
- if test ! -d doc
- then
- mkdir doc
- fi
- echo x - doc/Makefile 1>&2
- sed 's/.//' >doc/Makefile <<'*-*-END-of-doc/Makefile-*-*'
- -# make the various documents
- -
- -ROFF=nroff
- -
- -all: howto manner standard copyright install
- -
- -install: install.mn tmac.n
- - $(ROFF) tmac.n install.mn
- -
- -howto: howto.mn tmac.n
- - $(ROFF) tmac.n howto.mn
- -
- -manner: manner.mn tmac.n
- - $(ROFF) tmac.n manner.mn
- -
- -standard: standard.mn tmac.n
- - $(ROFF) tmac.n standard.mn
- -
- -copyright: copyright.mn tmac.n
- - $(ROFF) tmac.n copyright.mn
- *-*-END-of-doc/Makefile-*-*
- echo x - doc/mn.7 1>&2
- sed 's/.//' >doc/mn.7 <<'*-*-END-of-doc/mn.7-*-*'
- -.TH MN 7 "News Version B2.11"
- -.SH NAME
- -mn \- text formatting macros for the news documentation
- -.SH SYNOPSIS
- -.B "nroff \-mn"
- -[ options ] file ...
- -.br
- -.B "troff \-mn"
- -[ options ] file ...
- -.SH DESCRIPTION
- -.PP
- -This package of
- -.IR nroff (1)
- -and
- -.IR troff (1)
- -macro definitions provides a formatting facility
- -which may be used to run off the formatted news documents.
- -When reverse line motions are needed,
- -filter the output through
- -.IR col (1).
- -.PP
- -All \-mn macros,
- -diversions,
- -string registers,
- -and number registers are defined below.
- -Many
- -.I nroff
- -and
- -.I troff
- -requests are unsafe in conjunction with this package.
- -However,
- -the requests below may be used with impunity:
- -.LP
- -.ta 5n 12n
- -.nf
- - .bp begin new page
- - .br break output line
- - .sp \f2n\fP insert \f2n\fP spacing lines
- - .ce \f2n\fP center next \f2n\fP lines
- - .ls \f2n\fP line spacing: \f2n\fP=1 single, \f2n\fP=2 double space
- - .na no alignment of right margin
- -.fi
- -.PP
- -Font and point size changes with \ef and \es are also allowed;
- -for example,
- -\&``\ef2word\efR'' will italicize \f2word.\fP
- -Output of the
- -.IR tbl (1),
- -.IR eqn (1),
- -and
- -.IR refer (1)
- -preprocessors for equations,
- -tables,
- -and references is acceptable as input.
- -.SH FILES
- -/usr/lib/tmac/tmac.n
- -.SH "SEE ALSO"
- -eqn(1), refer(1), tbl(1), troff(1)
- -.SH WARNINGS
- -.PP
- -If you do not set the string register ``.f'' to the file name,
- -you will only be told the line number on which any errors occur.
- -If you define this string to be the file name,
- -you will get the file name,
- -too.
- -This is useful when dealing with a document
- -split up into many files.
- -.PP
- -This package is not now intended for uses
- -other than with the news documentation.
- -.PP
- -Bug reports are always welcome;
- -please send them to the author.
- -(Include a sample of the input;
- -this helps track down the bug.)
- -.SH AUTHOR
- -Matt Bishop
- -.RI ( mab@riacs.arpa ,
- -.IR ihnp4!ames!riacs!mab ,
- -.IR decvax!decwrl!riacs!mab )
- -.SH REQUESTS
- -.PP
- -In the
- -.I Note
- -column,
- -.I b
- -means the request causes a break,
- -and
- -.I i
- -means the macro,
- -number register,
- -string register,
- -or diversion is internal and should not be used for anything.
- -In the
- -.I "What It Is"
- -column,
- -.IR div " means " diversion ,
- -.IR mac " means " macro ,
- -.IR num " means " "number register" ,
- -and
- -.IR str " means " "string register" .
- -In the
- -.I "Initial Value"
- -column,
- -a hyphen means no initial value is used,
- -anything else is the initial value,
- -and if two values are given,
- -the first is for
- -.I nroff
- -and the second for
- -.IR troff .
- -.PP
- -.if n .in 0
- -.ds x \f2x\fP\|
- -.ds y \f2y\fP\|
- -.ds z \f2z\fP\|
- -.ds X "\*x
- -.ds Y "\*x \*y
- -.ds Z "\*x \*y \*z
- -.tr _.
- -.ta \w'MacroNames'u +\w'WhatItIs'u +\w'InitialVal'u +\w'Note 'u
- -.sp .3
- -.nf
- -Macro What Initial Note \0 Explanation
- -Name It Is Value
- -.sp .3
- -_f num \- \- file name, used in error messages if set
- -_ai mac \- \- author's institution
- -_au mac \- b author's name
- -_b \*Z mac \- \- print \*x in font 3, \*y after, \*z before;
- - if no arguments, switch to font 3
- -b num \- i used to embolden italics
- -_bi \*Z mac \- \- print \*x in emboldened font 2, \*y after,
- - \*z before
- -bm num 1i,1i+1v \- height of bottom margin
- -_bt mac \- \- print pottom title
- -bt num .5i+1v \- bottom of footer to bottom of page
- -_cf \*Z mac \- \- print contents of header line (double
- - quotes around \*x, \*y before, \*z after)
- -cm num 0 \- 0 if no cut marks, nonzero if cut marks
- -_cn \*Z mac \- \- print computer/site name; same as _i
- -_dd div \- i text of display
- -dg str \(**,\(dg \- footnote mark
- -dw str \f2current\fP \- name of current day of week
- -dy str \f2current\fP \- full date
- -_ed mac \- b end display
- -_ef mac \- b end footnote
- -_ei mac \- b move left margin to the right
- -_er mac \- \- print error message
- -_et mac \- b,i macro called at end of text
- -f0 str \- \- left bottom title
- -f1 num \- i current font number
- -f1 str \f2date\fP,\- \- center bottom title
- -f2 num \- i previous font number
- -f2 str \- \- right bottom title
- -fc num \- i per-page footnote count
- -_fd mac \- b,i drop footnotes
- -fg num \- i gets fudge factor for footnote
- -fl num 5.5i \- default footnote line length
- -_fn mac \- \- begin footnote
- -_fo mac \- \- bottom of page (footer) macro
- -fp num \- i current location of trap for _fo macro
- -_fs mac \- i print text/footnote separator
- -fs num \- i position where footnote printing should begin
- -_fx mac \- i collect overflow footnotes
- -_fy div \- i text of footnote overflow
- -_fz mac \- i move overflow footnotes from _fy to _tf
- -gs num \- i used to be sure footnotes fit
- -h0 num 0 i current level 1 section number
- -h0 str \- \- left header title
- -h1 num 0 i current level 2 section number
- -h1 str \f2\- page \-\fP \- center header title
- -h2 num 0 i current level 3 section number
- -h2 str \- \- right header title
- -h3 num 0 i current level 4 section number
- -_hd mac \- i top of page (header) macro
- -_hf mac \- \- print header field name; same as _cf
- -_hn \*x mac \- b numbered section; if present, \*x is level
- -hn num 0 i current level of numbering (temporary)
- -hs num 1v \- default intra-section spacing
- -_hu mac \- b unnumbered section header
- -_i \*Z mac \- \- print \*x in font 2, \*y after, \*z before;
- - if no arguments, switch to font 2
- -i1 num \- i current indent
- -i2 num \- i previous indent
- -id num 0 i 1 if in display, 0 otherwise
- -if num 0 i 1 if in footnote, 0 otherwise
- -_is \*Z mac \- \- print \*x 2p bigger, \*y after, \*z before;
- - if no arguments, increase point size by 2p
- -it num 0 i 0 before _bt called, 1 after
- -l0 num 0 i leftmost position for left margin
- -l1 num \- i first level of indent for left margin
- -l2 num \- i second level of indent for left margin
- -l3 num \- i third level of indent for left margin
- -l4 num \- i fourth level of indent for left margin
- -l5 num \- i fifth level of indent for left margin
- -l6 num \- i sixth level of indent for left margin
- -l7 num \- i seventh level of indent for left margin
- -l8 num \- i eighth level of indent for left margin
- -l9 num \- i ninth level of indent for left margin
- -li num 5n \- paragraph indent
- -ll num 6i \- default line length
- -lm num 0 i current level of indent for left margin
- -lo num \- i previous level for left margin
- -_lp \*Y mac \- b labelled paragraph; \*x is label, \*y indent
- -lq str ",`` \- left double quotation marks
- -mo str \f2current\fP \- name of current month
- -_mt mac \- b title
- -mt num 1.5i+1v \- distance of title from top of page
- -_ng \*Z mac \- \- newsgroup name; same as _b
- -_nl mac \- b reset point size to default
- -ns num 0 i if nonzero, _fn does not call _fs
- -_op \*Z mac \- \- command option; same as _b
- -p1 num 0 i 1 after PDP-11(tm) footnote printed,
- - 0 before
- -_pa \*Z mac \- \- print protocol appellation; same as _i
- -_pd \*Y mac \- \- print PDP-11(tm), footnote; \*x after,
- - \*y before
- -pd num 1v,.3v \- intra-paragraph spacing
- -_pf mac \- \- print footer title
- -_pg \*x mac \- b paragraph; if \*x is l, left justify
- -pi num 5n \- default paragraph indent
- -po num 1.25i \- default page offset
- -ps num 12p \- default point size
- -_pt \*x mac \- \- print header; \*x is distance from top of
- - page
- -_qc \*Z mac \- \- print name of control char; \*x is name,
- - in font 3, between <>, \*y after, \*z before
- -_qp \*Z mac \- \- print char; same as _b
- -_r mac \- \- switch to font 1
- -rq str ",'' \- right double quotation marks
- -s1 num \- i current point size
- -s2 num \- i previous point size
- -_sd \*X mac \- \- start display; if \*x is c, center display
- -sf num \- i 1 if center display, 0 otherwise
- -_si \*x num \- \- indent left margin by \*x (5n default)
- -_sm \*Z mac \- \- print \*x 2p smaller, \*y after, \*z before;
- - if no arguments, decrease point size by 2p
- -_sn \*x mac \- b space by \*x (1v default), enter nospace mode
- -_sr \*x mac \- \- enter spacemode, space by \*x (1v default)
- -t2 num 0 i 0 if little/no space, nonzero otherwise
- -_tf div \- i text of footnotes
- -tm num 1i-.5v \- height of top margin
- -tt num .5i-.5v \- distance from top of page to header
- -_ux \*Y mac \- \- print UNIX(tm), footnote; \*x after,
- - \*y before
- -ux num 0 i 1 after UNIX(tm) footnote printed,
- - 0 before
- -v1 num \- i current vertical spacing
- -v2 num \- i previous vertical spacing
- -vr str \- \- current version of news
- -vs num 16p \- default vertical spacing
- -vx num 0 i 1 after VAX(tm) footnote printed,
- - 0 before
- -_vx \*Y mac \- \- print VAX(tm), footnote; \*x after,
- - \*y before
- -ws str \- \- used to construct error message
- -_ya mac \- \- same as calling _yf, _yi, _ys, _yv
- -_yf mac \- \- restore fonts saved by _zf
- -_yi mac \- \- restore indents saved by _zi
- -_ys mac \- \- restore point sizes saved by _zs
- -_yv mac \- \- restore vertical spacings saved by _zv
- -_za mac \- \- same as calling _zf, _zi, _zs, _zv
- -_zf mac \- \- save previous, current fonts
- -_zi mac \- \- save previous, current indents
- -_zs mac \- \- save previous, current point sizes
- -_zv mac \- \- save previous, current vertical spacings
- -.fi
- *-*-END-of-doc/mn.7-*-*
- echo x - doc/tmac.n 1>&2
- sed 's/.//' >doc/tmac.n <<'*-*-END-of-doc/tmac.n-*-*'
- -.\" The News macro package
- -.\"
- -.\" This is the macro package that is used to format news documents. It
- -.\" was written because many sites do not have one of the -mm or -ms pack-
- -.\" ages that the documents use. This is NOT compatible with EITHER, but
- -.\" (I hope) will become the standard for all news documents (man pages
- -.\" excepted, since everyone seems to have -man.)
- -.\"
- -.\" This package was written using only the "NROFF/TROFF Users' Guide",
- -.\" and therefore if you can run NROFF/TROFF, you can legitimately use
- -.\" this package. However, because NROFF/TROFF are proprietary programs,
- -.\" I cannot place this package in the public domain. This should not
- -.\" matter, because if you legitimately have NROFF/TROFF, you have the
- -.\" documentation; if not, you can't run off the documentation anyway.
- -.\"
- -.\" This package may be circulated freely with the news documentation; it
- -.\" may not be sold, but is to be distributed with the unformatted news
- -.\" documents. However, the name of the author and the place at which it
- -.\" was written (in the author's own time, of course) are not to be
- -.\" removed from the package regardless of how it is modified or altered.
- -.\" Further, please do not distribute this package if you make any changes
- -.\" because I don't want to get bug reports of macros I haven't written;
- -.\" if you have a goodie you want me to add, send it to me and we'll talk.
- -.\" (I really do like feedback!) I'd really appreciate your cooperation.
- -.\"
- -.\" Author: Matt Bishop
- -.\" Research Institute for Advanced Computer Science
- -.\" Mail Stop 230-5
- -.\" NASA Ames Research Center
- -.\" Moffett Field, CA 94035
- -.\"
- -.\" version 1.0 September 28, 1985 mab@riacs.arpa
- -.\" initial version
- -.\" version 1.1 October 25, 1985 mab@riacs.arpa
- -.\" fixed an incredibly obscure footnote bug (that occurred twice in
- -.\" the news documentation!) which put footnoted words on one page
- -.\" and the footnote on the next if the word was in the next-to-last
- -.\" or last line; commented it, and generally cleaned up
- -.\" Version 1.2 October 27, 1985 mab@riacs.arpa
- -.\" Added a few more comments and a check to keep footnotes lined up
- -.\" with the bottom margin.
- -.\" Version 1.3 February 12, 1986 mab@riacs.arpa
- -.\" Added an error check to catch unmatched ef's and ed's
- -.\"
- -.\" **********
- -.\" these preserve and restore various things
- -.\" they are used to shorten other macros
- -.de yf \" restore fonts
- -.ft \\n(f2 \" previous font
- -.ft \\n(f1 \" current font
- -..
- -.de yi \" restore indents
- -'in \\n(i2u \" previous indent
- -'in \\n(i1u \" current indent
- -..
- -.de ys \" restore point sizes
- -.ps \\n(s2 \" previous point size
- -.ps \\n(s1 \" current point size
- -..
- -.de yv \" restore vertical spacings
- -.vs \\n(v2u \" previous vertical spacing
- -.vs \\n(v1u \" current vertical spacing
- -..
- -.de ya \" restore everything
- -.yf \" restore fonts
- -.yi \" restore indents
- -.ys \" restore point sizes
- -.yv \" restore vertical spacing
- -..
- -.de zf \" preserve fonts
- -.nr f1 \\n(.f \" current font
- -.ft \" switch to previous font
- -.nr f2 \\n(.f \" previous font
- -.ft \" back to current font
- -..
- -.de zi \" preserve indents
- -.nr i1 \\n(.iu \" current indent
- -'in \" switch to previous indent
- -.nr i2 \\n(.iu \" previous indent
- -'in \" back to current indent
- -..
- -.de zs \" preserve point sizes
- -.nr s1 \\n(.su \" current point size
- -.ps \" switch to previous point size
- -.nr s2 \\n(.su \" previous point size
- -.ps \" back to current point size
- -..
- -.de zv \" preserve vertical spacings
- -.nr v1 \\n(.vu \" current vertical spacing
- -.vs \" switch to previous vertical spacing
- -.nr v2 \\n(.vu \" previous vertical spacing
- -.vs \" back to current vertical spacing
- -..
- -.de za \" save everything
- -.zf \" save fonts
- -.zi \" save indents
- -.zs \" save point sizes
- -.zv \" save vertical spacings
- -..
- -.\" **********
- -.\" these actually print the header and footer titles
- -.\" they are defined separately from the "hd" and "fo" macros
- -.\" to make user redefinition easy
- -.de pt \" print header title
- -. \" omit header on first page
- -.if \\n%>1 \{\
- -' sp |\\$1u \" move to proper position
- -. ft 1 \" change to default font
- -. ps \\n(ps \" change to default point size
- -. vs \\n(vs \" change to default spacing
- -. tl '\\*(h0'\\*(h1'\\*(h2' \" center title
- -. vs \" restore current vertical spacing
- -. ps \" restore current point size
- -. ft \" restore current font
- -.\}
- -..
- -.de pf \" print footer title
- -.ft 1 \" change to default font
- -.ps \\n(ps \" change to default point size
- -.vs \\n(vs \" change to default spacing
- -.ie \\n%=1 .tl '\\*(h0'\\*(h1'\\*(h2' \" on first page, print the header here
- -.el .tl '\\*(f0'\\*(f1'\\*(f2' \" on other pages, print the footer
- -.vs \" restore current vertical spacing
- -.ps \" restore current point size
- -.ft \" restore current font
- -..
- -.\" **********
- -.\" these are the top of page (header) and bottom of page (footer) macros
- -.\" they don't actually print anything, just call the right macros
- -.de hd \" header -- do top of page processing
- -.if t .if \\n(cm .tl '\(rn''' \" drop cut mark if needed
- -.pt \\n(ttu \" print header
- -.nr fc 0 1 \" init footnote count
- -.nr fs \\n(.pu-\\n(bmu-1u \" if any footnotes, start print here
- -.nr fp 0-\\n(bmu \" reset current footer place
- -.ch fo -\\n(bmu \" reset footer trap
- -.if \\n(dn .fz \" put leftover footnotes st bottom
- -.ya \" restore font, etc.
- -'sp |\\n(tmu \" move to top of body
- -.ns \" don't allow any more space
- -..
- -.de fo \" footer -- do bottom of page processing
- -.za \" save font, etc.
- -.rs \" you want motions here
- -.nr dn 0 \" clobber diversion size register
- -.if \\n(fc .fd \" now print the footnotes, if any
- -'bp \" force out page
- -..
- -.\" **********
- -.\" these are the footnote macros
- -.\" here's an overview:
- -.\" Footnotes are processed in environment #1, which is initialized
- -.\" at the bottom of this package. When "fn" is called, nroff/troff
- -.\" switches to this environment. The body of the footnote is saved
- -.\" in the diversion "tf" (for "temporary footnote"), so you will
- -.\" NEVER spring a trap during the first reading of a footnote. When
- -.\" "ef" ("end footnote" is called, the diversion is closed. If
- -.\" this is the first footnote on the page (ie, the number register
- -.\" "fc" is 1), and the footnote height (plus the height of 1 line)
- -.\" crosses the bottom margin, you get the footnoted word on one
- -.\" page and the footnote on the other. In this case we just call
- -.\" "fo" manually (taking case it cannot be re-invoked on the same
- -.\" page!) If this situation does not occur, we just adjust the
- -.\" footer trap's position upwards (we'll get to how far in a min-
- -.\" ute); if this puts the trap above the current line, we reposi-
- -.\" tion the trap just beneath the current line to be sure of trig-
- -.\" triggering it once the current line is forced out.
- -.\" To reposition the footer trap, we proceed as follows. Because
- -.\" the trap may be sprung in the middle of a line, it is possible
- -.\" that the footnote will not fit on the page (regardless of where
- -.\" on the page the footnoted word occurs -- really!) if we move the
- -.\" trap up by the size of the footnote diversion "tf". So, we
- -.\" fudge things a little bit -- for the first footnote on each page
- -.\" we move the footer trap up 1 extra line ("line" being 1v in env-
- -.\" ironment #0). Unless the point size and vertical spacing are
- -.\" increased between the first footnote and the footer trap's being
- -.\" sprung, this will keep the footnotes on the same page as the
- -.\" footnoted word. But as there may be now as much as 1v of space
- -.\" between the footnote and the bottom margin, which looks HIDEOUS,
- -.\" we use the number register "fs" to mark where the footer trap
- -.\" would REALLY go, and just space to it when it comes time to put
- -.\" out the footnotes.
- -.de fd \" dump footnotes
- -.nr gs 1v \" get a measure of 1 line in env #0
- -.ev 1 \" switch to footnote environment
- -.nr gs +2v \" min of 2 lines of footnotes
- -. \" if the number register ns > 0,
- -. \" the last text line may contain a
- -. \" footnote that is too big to fit;
- -. \" this checks for such a note and
- -. \" if so, forces the footnote into
- -. \" the "fy" diversion that carries
- -. \" it onto the next text page
- -.ie (\\n(nsu>0)&(\\n(gsu>=\\n(.tu) 'sp \\n(gsu \" be sure you can get it down
- -.el .if \\n(fsu>\\n(nlu 'sp \\n(fsu-\\n(nlu \" move to footnote start position
- -'nf \" don't reprocess footnotes
- -'in 0 \" don't indent them any more either
- -.tf \" drop text of footnotes
- -.rm tf
- -.if '\\n(.z'fy' .di \" end overflow diversion, if any
- -.nr fc 0 \" re-init footnote count
- -.ev \" return to usual environment
- -..
- -.de fn \" start footnote
- -. \" look for nested footnotes -- ILLEGAL
- -.ie \\n(if>0 .er "footnote within footnote"
- -.el .da tf \" append footnote to footnote diversion
- -.nr if +1 \" increment level of footnoting
- -.nr fc +1 \" one more footnote on this page
- -.if \\n(fc=1 .nr fp -1v \" The reason for this "fudge factor"
- -. \" is that there is no way to force
- -. \" NROFF/TROFF to invoke a macro at
- -. \" the end of each line. At times,
- -. \" the trap boundary will not match up
- -. \" with the bottom of a line, so the
- -. \" "fo" trap which is set at 2320 may
- -. \" not be triggered until 2340 -- and
- -. \" then the footnote won't fit. This
- -. \" gives some slack so the footnote is
- -. \" more likely to fit. *sigh*
- -.ev 1 \" enter footnote environment
- -.if \\n(fc=1 .fs \" drop separator if first footnote
- -.br \" flush out any previous line in footnote
- -.fi \" process footnote in fill mode
- -..
- -.de ef \" end footnote
- -.br \" flush out the line in footnote
- -.ie \\n(if<=0 .er "end footnote has no corresponding begin footnote"
- -.el \{\
- -. nr if -1 \" decrement level of footnoting
- -. nr fg 2v \" remember this for repositioning fo
- -. ev \" back to usual environment
- -. if \\n(if=0 \{\
- -. di \" end of footnote proper
- -. nr fp -\\n(dnu \" "fo" will be moved at least up this far
- -. nr fs -\\n(dnu \" increase size of footnote
- -. ch fo \\n(fpu \" reposition "fo" trap (first guess)
- -. \" the first part of the "ie" clause
- -. \" is taken in the special case
- -. \" described above
- -. ie (\\n(fc=1)&((\\n(nlu+1v+\\n(fgu)>=(\\n(.pu-\\n(bmu)) \{\
- -. nr ns \\n(dnu \" suppress footnote separator
- -. \" since this footnote contains it
- -. \" keep "fo" from being invoked twice
- -. ch fo \\n(.pu+1i
- -. fo \" force the page out AT ONCE
- -. nr ns 0 \" re-enable footnote separator
- -. \}
- -. \" footnote won't fit completely
- -. el .if (\\n(nlu+1v)>=(\\n(.pu+\\n(fpu) .ch fo \\n(nlu+1u
- -. \}
- -.\}
- -..
- -.de fs \" drop footnote separator
- -. \" only if not already dropped
- -.if \\n(ns=0 \l'1i'
- -.nr ns 0 \" in case footnotes are over 1 page long
- -..
- -.de fx \" process footnote overflow
- -.if \\n(fc .di fy \" stuff them in the right place
- -..
- -.de fz \" deposit footnote overflow
- -.fn \" treat it as a footnote
- -.nf \" it's already been processed
- -.in 0 \" and indented
- -.fy \" "fx" put it here
- -.ef \" end the footnote
- -..
- -.\" **********
- -.\" the ones after here are user-invoked (like "fn" and "ef" above)
- -.\" title, author, etc.
- -.de mt \" main title
- -\&
- -.sp |\\n(mtu \" space
- -.ft 3 \" in bold
- -.ps \\n(ps+2p \" large point size and
- -.vs \\n(vs+2p \" vertical spacing
- -.ce 1000 \" center the title
- -.nr t2 1 \" space it
- -..
- -.de au \" author
- -.nr t2 0 \" spacing here
- -.sp 2v \" space
- -.ft 2 \" in italics
- -.ps \\n(ps \" usual point size and
- -.vs \\n(vs \" vertical spacing
- -.ce 1000 \" center the name(s)
- -..
- -.de ai \" author's institution
- -.if \\n(t2 .sp 2v \" space after a title
- -.nr t2 0 \" institution
- -.ft 2 \" in italics
- -.ps \\n(ps \" usual point size and
- -.vs \\n(vs \" vertical spacing
- -.ce 1000 \" center the name(s)
- -..
- -.de bt \" begin text macro
- -.nr t2 0 \" hold it here
- -.nr it +1 \" mark as called
- -.ce 0 \" end any centering
- -.sn 3v \" a little bit of space
- -..
- -.\" paragraph
- -.de si \" start indented section
- -.nr lo \\n(lm \" remember the current level
- -.nr lm +1 \" go to the next level
- -.ie '\\$1'' .nr l\\n(lm \\n(l\\n(lo+5n \" if no arg, indent 5n
- -.el .nr l\\n(lm \\$1n \" otherwise, indent that much
- -..
- -.de ei \" end indent
- -.nr lm -1 \" down one level
- -.if \\n(lm<0 .nr lm 0 \" make sure you don't go too far
- -..
- -.de pg \" plain old paragraph
- -.if !\\n(it .bt \" end the title and such
- -.sn \\n(pdu \" inter-paragraph spacing
- -.ft 1 \" reset a few things (paranoia)
- -. \" these ONLY if not in footnote
- -.ie \\n(if=0 \{\
- -. ps \\n(ps \" reset point size
- -. vs \\n(vs \" reset vertical spacing
- -. ne 1v+\\n(.Vu \" slightly more than 1 line
- -.\}
- -.el \{\
- -. ps \\n(ps-2p \" reset point size
- -. vs \\n(vs-2p \" reset vertical spacing
- -.\}
- -.in \\n(l\\n(lmu \" stop any indenting
- -.ce 0 \" stop any centering
- -.if !'\\$1'L' .if !'\\$1'l' .ti +\\n(piu \" indent the sucker
- -..
- -.de lp \" labelled paragraph
- -.pg l \" reset paragraph
- -.if \\n(.$>1 .nr li \\$2n \" if indent given use it
- -.in +\\n(liu \" indent for paragraph
- -.ti -\\n(liu \" force first line NOT to indent
- -.ta +\\n(liu \" for the label
- -\&\\$1\t\c
- -.if \\w'\\$1'u>=(\\n(l\\n(lmu+\\n(liu) .br \" don't overwrite
- -..
- -.\" section
- -.de hu \" header, unnumbered
- -.if !\\n(it .bt \" end the title and such
- -.br \" force out previous line
- -.b
- -.ps \\n(ps
- -.vs \\n(vs
- -.in \\n(l\\n(lmu \" stop any indenting
- -.sn \\n(hsu \" inter-section spacing
- -.ne 3v+\\n(.Vu \" slightly more than 3 lines
- -.fi \" process the text, too
- -..
- -.de hn \" header, numbered
- -.hu
- -.ie !'\\$1'' .nr hn \\$1
- -.el .nr hn 1
- -.ie \\n(hn>0 .nr hn -1
- -.el .nr hn 0
- -.ie \\n(hn=0 \{\
- -. nr h0 +1 \" add 1 to main section header
- -. nr h1 0 \" zap remaining section numbers
- -. nr h2 0 \" zap remaining section numbers
- -. nr h3 0 \" zap remaining section numbers
- -\\n(h0.
- -.\}
- -.el .ie \\n(hn=1 \{\
- -. nr h1 +1 \" add 1 to the section header
- -. nr h2 0 \" zap remaining section numbers
- -. nr h3 0 \" zap remaining section numbers
- -\\n(h0.\\n(h1.
- -.\}
- -.el .ie \\n(hn=2 \{\
- -. nr h2 +1 \" add 1 to the section header
- -. nr h3 0 \" zap remaining section numbers
- -\\n(h0.\\n(h1.\\n(h2.
- -.\}
- -.el \{\
- -. nr h3 +1 \" add 1 to the section number
- -\\n(h0.\\n(h1.\\n(h2.\\n(h3.
- -.\}
- -.if \\n(.$=2 \\$2
- -..
- -.\" displays (no floats, thank God!)
- -.de sd \" start display
- -. \" look for nested displays -- ILLEGAL
- -.ie \\n(id>0 .er "display within display"
- -.el \{\
- -. ie '\\$1'c' .nr sf 1 \" center the sucker
- -. el .nr sf 0 \" don't center it
- -.\}
- -.sn \\n(pdu \" a little bit of space
- -.ev 2 \" switch to display environment
- -.nf \" what you type is what you get
- -.if \\n(id=0 .di dd \" start saving text
- -.rs \" don't eat leading space
- -.nr id +1 \" increment level of display
- -..
- -.de ed \" end display
- -.br \" flush line
- -.ie \\n(id<=0 .er "end display has no corresponding begin display"
- -.el \{\
- -. nr id -1 \" decrement level of display
- -. if \\n(id=0 \{\
- -. di \" end diversion
- -. fi \" resume filling
- -. in -\\n(piu \" dedent
- -. ev \" pop environment
- -. ne \\n(dnu \" be sure you have room
- -. nf \" don't reprocess display
- -. rs \" don't eat leading space
- -. zi \" save indents
- -. ie \\n(sf .in (\\n(llu-\\n(dlu)/2u \" center on the line length
- -. el .in +\\n(piu \" indent the sucker
- -. dd \" drop display
- -. yi \" restore indents
- -. \}
- -.\}
- -.fi \" resume filling
- -.sn \\n(pdu \" a little bit of space
- -..
- -.\" **********
- -.\" fonts -- if argument(s), apply only to first
- -.de b \" bold (font 3)
- -.ie \\n(.$>0 \\&\\$3\\f3\\$1\\fP\\$2
- -.el .ft 3
- -..
- -.de i \" italics (font 2)
- -.ie \\n(.$>0 \\&\\$3\\f2\\$1\\fP\\$2
- -.el .ft 2
- -..
- -.de r \" roman (font 1)
- -.ft 1 \" just restore it
- -..
- -.de bi \" bold italics (embolden font 2)
- -\\&\\$3\c
- -\\kb\\f2\\$1\\fP\\h'|\\nbu+2u'\\f2\\$1\\fP\\$2
- -..
- -.\" **********
- -.\" point sizes -- if argument(s), apply only to first
- -.de sm \" reduce point size by 2
- -.ie \\n(.$>0 \\&\\$3\\s-2\\$1\\s0\\$2
- -.el .ps -2
- -..
- -.de is \" increase point size by 2
- -.ie \\n(.$>0 \\&\\$3\\s+2\\$1\\s0\\$2
- -.el .ps +2
- -..
- -.de nl \" return to normal size
- -.ps \\n(ps \" just reset the point size
- -..
- -.\" **********
- -.\" handy force space/inhibit more space macros
- -.de sn \" space, then turn on nospace mode
- -.sp \\$1 \" space
- -.ns \" ignore any more space requests
- -..
- -.de sr \" force out space
- -.rs \" turn on spacing mode
- -.sp \\$1 \" space
- -..
- -.\" **********
- -.\" end of text and error macros
- -.de et \" end of text macro
- -.br \" flush out remaining line
- -.tf \" dump any footnotes
- -. \" check for open displays or footnotes
- -.if \\n(id>0 .er "unfinished display"
- -.if \\n(if>0 .er "unfinished footnote"
- -. \" this one means an -mn bug (*sigh*)
- -.if !'\\n(.z'' .er "diversion \\n(.z not closed"
- -..
- -.de er \" print error message
- -. \" flag it as an error
- -.ds ws "** ERROR **
- -. \" if you have it, give the file name
- -.if !'\\*(.f'' .as ws " file \\*(.f,
- -. \" put out the line number
- -.as ws " line \\n(.c
- -. \" and finally the error message
- -.tm \\*(ws: \\$1
- -..
- -.\" **********
- -.\" macros in this section are VERY specific to the news documentation
- -.de pa \" protocol appellation (darn names!)
- -\\&\\$3\\f2\\$1\\fP\\$2
- -..
- -.de ng \" news group name
- -\\&\\$3\\f3\\$1\\fP\\$2
- -..
- -.de cn \" computer name
- -\\&\\$3\\f2\\$1\\fP\\$2
- -..
- -.de hf \" header field
- -\\&\\$3\\*(lq\\$1\\*(rq\\$2
- -..
- -.de cf \" contents of field
- -\\&\\$3\\*(lq\\$1\\*(rq\\$2
- -..
- -.de qc \" quote control char (command)
- -\\&\\$3\\f3<\\s-2\\$1\\s0>\\fP\\$2
- -..
- -.de qp \" quote printing char (command)
- -\\&\\$3\\f3\\$1\\fP\\$2
- -..
- -.de op \" option
- -\\&\\$3\\f3\\$1\\fP\\$2
- -..
- -.\" **********
- -.\" trademarked names
- -.de pd \" print "PDP-11"
- -.ie \\n(p1 \\&\\$2\\s-1PDP\\s0-11\\$1
- -.el \{\
- -. nr p1 +1 \" mark footnote as dropped
- -\\&\\$2\\s-1PDP\\s0-11\\*(dg\\$1
- -. fn \" put out the footnote
- -\\&\\*(dgPDP-11 is a trademark of Digital Equipment Corporation.
- -. ef \" short and sweet ...
- -.\}
- -..
- -.de ux \" print "UNIX"
- -.ie \\n(ux \\&\\$2\\s-1UNIX\\s0\\$1
- -.el \{\
- -. nr ux +1 \" mark footnote as dropped
- -\\&\\$2\\s-1UNIX\\s0\\s-5\\u\\*(rg\\s0\\d\\$1
- -. fn \" put out the footnote
- -\\&\\s-5\\u\\*(rg\\s0\\dUNIX is a registered trademark of AT&T.
- -. ef \" short and sweet ...
- -.\}
- -..
- -.de vx \" print "VAX"
- -.ie \\n(vx \\&\\$2\\s-1VAX\\s0\\$1
- -.el \{\
- -. nr vx +1 \" mark footnote as dropped
- -\\&\\$2\\s-1VAX\\s0\\*(dg\\$1
- -. fn \" put out the footnote
- -\\&\\*(dgVAX is a trademark of Digital Equipment Corporation.
- -. ef \" short and sweet ...
- -.\}
- -..
- -.\" **********
- -.\" set up string and number registers
- -. \" set up for the date
- -.if \n(mo=1 .ds mo January
- -.if \n(mo=2 .ds mo February
- -.if \n(mo=3 .ds mo March
- -.if \n(mo=4 .ds mo April
- -.if \n(mo=5 .ds mo May
- -.if \n(mo=6 .ds mo June
- -.if \n(mo=7 .ds mo July
- -.if \n(mo=8 .ds mo August
- -.if \n(mo=9 .ds mo September
- -.if \n(mo=10 .ds mo October
- -.if \n(mo=11 .ds mo November
- -.if \n(mo=12 .ds mo December
- -.ds dy "\*(mo \n(dy, 19\n(yr
- -.if \n(dw=1 .ds dw Sunday
- -.if \n(dw=2 .ds dw Monday
- -.if \n(dw=3 .ds dw Tuesday
- -.if \n(dw=4 .ds dw Wednesday
- -.if \n(dw=5 .ds dw Thursday
- -.if \n(dw=6 .ds dw Friday
- -.if \n(dw=7 .ds dw Saturday
- -. \" NROFF dependencies
- -.if n \{\
- -. \" string registers
- -. ds dg *
- -. ds rg *
- -. ds lq ""
- -. ds rq ""
- -. ds f1 "\*(dy
- -. \" number registers
- -. nr hs 1v \" space before section header
- -. nr pd 1v \" inter-paragraph spacing
- -. nr bm 1.0i \" height of bottom margin
- -.\}
- -.if t \{\
- -. \" string registers
- -. ds dg \(dg
- -. ds rg \(rg
- -. ds lq ``
- -. ds rq ''
- -. \" number registers
- -. nr hs 1v \" space before section header
- -. nr pd 0.3v \" inter-paragraph spacing
- -. nr bm 1.0i+1v \" height of bottom margin (wacky laser)
- -.\}
- -. \" these are the same for [NT]ROFF
- -.ds vr "News Version B 2.11
- -.ds h1 - % -
- -.nr bt 0.5i+1v \" bottom of page to footer
- -.nr cm 0 \" no cut marks
- -.nr fc 0 1 \" init footnote count
- -.nr fl 5.5i \" footnote line length
- -.nr fp 0-\n(bmu \" fo macro trap location
- -.nr h0 0 \" init section header level 0
- -.nr h1 0 \" init section header level 1
- -.nr h2 0 \" init section header level 2
- -.nr h3 0 \" init section header level 3
- -.nr id 0 \" 1 in display
- -.nr if 0 \" 1 in keep
- -.nr it 0 \" 1 when beyond title, etc.
- -.nr li 5n \" indent for labelled paragraph
- -.nr ll 6.5i \" line length
- -.nr lm 0 \" left margin
- -.nr l0 0 \" first indent level
- -.nr mt 1.5i+1v \" title goes down this far
- -.nr pi 5n \" regular paragraph indent
- -.nr po 1.0i \" page offset
- -.nr ps 10 \" point size
- -.nr tm 1.0i \" height of top margin
- -.nr tt 0.5i-0.5v \" top of page to header
- -.nr p1 0 \" no PDP-TM message yet
- -.nr ux 0 \" no UNIX-TM message yet
- -.nr vx 0 \" no VAX-TM message yet
- -.nr vs 12 \" vertical spacing
- -.\" set things up
- -.po \n(pou \" set page offset
- -.ps \n(ps \" set previous, current
- -.ps \n(ps \" point sizes
- -.vs \n(vs \" set previous, current
- -.vs \n(vs \" vertical spacings
- -.ll \n(llu \" set line length
- -.lt \n(llu \" set title line length
- -.ev 1 \" *** footnote environment
- -.ps \n(ps-2p \" set previous, current
- -.ps \n(ps-2p \" point sizes
- -.vs \n(vs-2p \" set previous, current
- -.vs \n(vs-2p \" vertical spacings
- -.ll \n(flu \" set line length
- -.lt \n(flu \" set title line length
- -.ev \" *** pop environment
- -.ev 2 \" *** footnote environment
- -.ps \n(ps \" set previous, current
- -.ps \n(ps \" point sizes
- -.vs \n(vs \" set previous, current
- -.vs \n(vs \" vertical spacings
- -.ll \n(llu \" set line length
- -.lt \n(llu \" set title line length
- -.ev \" *** pop environment
- -.\" install traps
- -.wh 0i hd \" position header trap
- -.wh -\n(bmu fo \" position footer trap
- -.wh \n(.pu+1i fx \" put footnote overflow trap here
- -.ch fx -\n(bmu \" move it over fo
- -.wh -\n(btu pf \" print the bottom margin here
- -.em et \" at end of file, call et
- -.\" couple of miscellaneous requests
- -.bd S 3 3 \" embolden special font chars if B
- -.hy 2 \" don't hyphenate last lines
- *-*-END-of-doc/tmac.n-*-*
- echo x - doc/copyright.mn 1>&2
- sed 's/.//' >doc/copyright.mn <<'*-*-END-of-doc/copyright.mn-*-*'
- -.ds .f copyright.mn
- -.ds h0 "Copyright Law
- -.ds h1
- -.ds h2 %
- -.ds f0 "\*(vr
- -.ds f1
- -.ds f2 "February 26, 1986
- -.mt
- -Copyright Law
- -.au
- -Jordan J. Breslow
- -.ai
- -1225 Alpine Road, Suite 200
- -Walnut Creek, CA 94596
- -+1 415 932 4828
- -.bt
- -.fn
- -\(co Copyright 1986 Breslow, Redistributed by permission
- -.ef
- -.pg
- -I am an attorney practicing copyright law and computer
- -law. I read a series of queries in net.legal about
- -copyright law and was dismayed to find that people who
- -had no idea what they were talking about were spreading
- -misinformation over the network. Considering that the
- -penalties for copyright infringement can include
- -$50,000.00 damages per infringed work, attorneys fees,
- -court costs, criminal fines and imprisonment, and
- -considering that ignorance is no excuse and innocent
- -intent is not even a recognized defense, I cringe to see
- -the network used as a soapbox for the ill-informed. For
- -that reason, this article will discuss copyright law and
- -license law as they pertain to computer software.
- -.pg
- -My goal is to enable readers to determine when they
- -should be concerned about infringing and when they can
- -relax about it. I also want to let programmers know how
- -to obtain copyright for their work. I'll explain the
- -purpose of software licenses, and discuss the effect
- -that the license has on copyright. For those of you who
- -are programmers, I'll help you decide whether you own
- -the programs you write on the job or your boss owns
- -them. I will also mention trademark law and patent law
- -briefly, in order to clarify some confusion about which
- -is which. Incidentally, if you read this entire essay,
- -you will be able to determine whether or not the essay
- -is copyrighted and whether or not you can make a
- -printout of it.
- -.pg
- -This is a long article, and you may not want to
- -read all of it. Here is an outline to help you decide
- -what to read and what to ignore:
- -.nf
- -.si 10
- -1. The Meaning of Copyright from the Viewpoint of the Software User
- -1.1 A bit of history
- -1.2 The meaning of \f2copyright\fP
- -1.3 The meaning of \f2public domain\fP
- -1.4 A hypothetical software purchase
- -1.5 Can you use copyrighted software?
- -1.6 Can you make a backup copy?
- -1.7 Licenses may change the rules
- -1.8 Can you modify the program?
- -1.9 Can you break the copy protection scheme?
- -1.10 Summary
- -.sp
- -2. Copyright Sounds Neat -- How Do I Get One? Or, How Do I Know If
- - this Program is Copyrighted?
- -2.1 How do you get a copyright?
- -2.2 How do you lose a copyright?
- -2.3 How do you waste a stamp?
- -2.4 Do you have to register?
- -2.5 How copyright comes into existence
- -2.6 The copyright notice
- -2.7 Advantages of registration
- -2.8 A test to see if you understand this article
- -.sp
- -3. Who Owns The Program You Wrote?
- -3.1 Introduction
- -3.2 Programs written as an employee
- -3.3 Programs written as a contractor
- -.sp
- -4. A Brief Word about Licenses
- -4.1 Why a license?
- -4.2 Is it valid?
- -.sp
- -.5 I Have a Neat Idea. Can I Trademark it? What about a Patent?
- -5.1 Trademark law explained
- -5.2 Patent law
- -.sp
- -6. Conclusion
- -.ei
- -.fi
- -.sp 2
- -.hn 1
- -The Meaning of Copyright from the Viewpoint of the Software User
- -.hn 2
- -A bit of history
- -.pg
- -If you're not interested in history, you can
- -skip this paragraph.
- -.i Modern
- -copyright law first came
- -into existence in 1570, by an act of Parliament called
- -the Statute of Anne. Like most laws, it hasn't changed
- -much since. It was written with books and pictures in
- -mind. Parliament, lacking the foresight to predict the
- -success of the Intel and IBM corporations, failed to
- -consider the issue of copyrighting computer programs.
- -.pg
- -At first, courts questioned whether programs could be
- -copyrighted at all. The problem was that judges
- -couldn't read the programs and they figured the
- -Copyright Law was only meant to apply to things humans
- -(which arguably includes judges) could read without the
- -aid of a machine. I saw some mythical discussion about
- -that in some of the net.legal drivel. Let's lay that to
- -rest: programs are copyrightable as long as there is
- -even a minimal amount of creativity. The issue was laid
- -to rest with the Software Act of 1980. That Act
- -modified the Copyright Act (which is a Federal law by
- -the way), in such a way as to make it clear that
- -programs are copyrightable. The few exceptions to this
- -rule will rarely concern anyone. The next question to
- -arise was whether a program was copyrightable if it was
- -stored in ROM rather than on paper. The decision in
- -the Apple v. Franklin case laid that to rest: it is.
- -.hn 2
- -The meaning of \f2copyright\fP
- -.pg
- -Now, what is copyright? As it is commonly
- -understood, it is the right to make copies of something
- --- or to put it the other way around, it is the right to
- -prohibit other people from making copies. This is known
- -as an exclusive right -- the exclusive right to
- -.i reproduce ,
- -in the biological language of the Copyright
- -Act -- and what most people don't know is that copyright
- -involves not one, not two, but five exclusive rights.
- -These are (1) the exclusive right to make copies, (2)
- -the exclusive right to distribute copies to the public,
- -(3) the exclusive right to prepare
- -.i "derivative works"
- -(I'll explain, just keep reading), (4) the exclusive
- -right to perform the work in public (this mainly applies
- -to plays, dances and the like, but it could apply to
- -software), and (5) the exclusive right to display the
- -work in public (such as showing a film).
- -.hn 2
- -The meaning of \f2public domain\fP
- -.pg
- -Before we go any further, what is public
- -domain? I saw some discussion on the net about public
- -domain software being copyrighted. Nonsense. The
- -phrase
- -.i "public domain,"
- -when used correctly, means the
- -absence of copyright protection. It means you can copy
- -public domain software to your heart's content. It
- -means that the author has none of the exclusive rights
- -listed above. If someone uses the phrase
- -.i "public domain"
- -to refer to
- -.i freeware
- -(software which is copyrighted but is distributed without advance payment
- -but with a request for a donation), he or she is using
- -the term incorrectly. Public domain means no copyright
- --- no exclusive rights.
- -.hn 2
- -A hypothetical software purchase
- -.pg
- -Let's look at those exclusive rights from the
- -viewpoint of someone who has legitimately purchased a
- -single copy of a copyrighted computer program. For the
- -moment, we'll have to ignore the fact that the program
- -is supposedly licensed, because the license changes
- -things. I'll explain that later. For now, assume you
- -went to Fred's Diner and Software Mart and bought a
- -dozen eggs, cat food and a word processing program. And
- -for now, assume the program is copyrighted.
- -.hn 2
- -Can you use copyrighted software?
- -.pg
- -What can you do with this copyrighted
- -software? Let's start with the obvious: can you use it
- -on your powerful Timex PC? Is this a joke? No. Prior
- -to 1980, my answer might have been No, you can't use it!
- -.pg
- -People actually pay me for advice like that! Well
- -think: you take the floppy disk out of the zip lock
- -baggy, insert it in drive A and load the program into
- -RAM. What have you just done? You've made a copy in
- -RAM -- in legalese, you've reproduced the work, in
- -violation of the copyright owner's exclusive right to
- -reproduce. (I better clarify something here: the
- -copyright owner is the person or company whose name
- -appears in the copyright notice on the box, or the disk
- -or the first screen or wherever. It may be the person
- -who wrote the program, or it may be his boss, or it may
- -be a publishing company that bought the rights to the
- -program. But in any case, it's not you. When you buy a
- -copy of the program, you do not become the copyright
- -owner. You just own one copy.)
- -.pg
- -Anyway, loading the program into RAM means
- -making a copy. The Software Act of 1980 addressed this
- -absurdity by allowing you to make a copy if the copy \*(lqis
- -created as an essential step in the utilization of the
- -computer program in conjunction with a machine and ...
- -is used in no other manner ....\*(rq By the way,
- -somebody tell me what
- -.i "a machine"
- -means. If you connect
- -5 PC's on a network is that
- -.i "a machine"
- -or
- -.i "several machines" ?
- -A related question is whether or not running
- -software on a network constitutes a performance. The
- -copyright owner has the exclusive right to do that,
- -remember?
- -.hn 2
- -Can you make a backup copy?
- -.pg
- -OK, so you bought this copyrighted program
- -and you loaded it into RAM or onto a hard disk without
- -the FBI knocking on your door. Now can you make a
- -backup copy?
- -.b YES .
- -The Software Act also provided that
- -you can make a backup copy, provided that it \*(lqis for
- -archival purposes only ....\*(rq What you cannot do,
- -however, is give the archive copy to your friend so that
- -you and your pal both got the program for the price of
- -one. That violates the copyright owner's exclusive
- -right to distribute copies to the public. Get it? You
- -can, on the other hand, give both your original and
- -backup to your friend -- or sell it to him, or lend it
- -to him, as long as you don't retain a copy of the
- -program you are selling. Although the copyright owner
- -has the exclusive right to distribute (sell) copies of
- -the program, that right only applies to the first sale
- -of any particular copy. By analogy, if you buy a
- -copyrighted book, you are free to sell your book to a
- -friend. The copyright owner does not have the right to
- -control resales.
- -.hn 2
- -Licenses may change the rules
- -.pg
- -At this point, let me remind you that we have
- -assumed that the program you got at the store was sold
- -to you, not licensed to you. Licenses may change the
- -rules.
- -.hn 2
- -Can you modify the program?
- -.pg
- -Now, you're a clever programmer, and you know
- -the program could run faster with some modifications.
- -You could also add graphics and an interactive mode and
- -lots of other stuff. What does copyright law say about
- -your plans? Well ... several different things,
- -actually. First, recall that the copyright owner has
- -the exclusive right to make derivative works. A
- -derivative work is a work based on one or more
- -preexisting works. It's easy to recognize derivative
- -works when you think about music or books. If a book is
- -copyrighted, derivative works could include a
- -screenplay, an abridged edition, or a translation into
- -another language. Derivative works of songs might be
- -new arrangements (like the jazz version of Love Potion
- -Number 9), a movie soundtrack, or a written
- -transcription, or a
- -.i "long version" ,
- -(such as the fifteen minute version of \*(lqWipe Out\*(rq with an extended
- -drum solo for dance parties). In my opinion, you are making a
- -derivative work when you take the store-bought word
- -processor and modify it to perform differently. The
- -same would be true if you
- -.i translated
- -a COBOL program
- -into BASIC. Those are copyright infringements -- you've
- -horned in on the copyright owner's exclusive right to
- -make derivative works. There is, however, some
- -breathing room. The Software Act generously allows you
- -to
- -.i adapt
- -the code if the adaptation \*(lqis created as an
- -essential step in the utilization of the computer
- -program in conjunction with a machine ....\*(rq For
- -example, you might have to modify the code to make it
- -compatible with your machine.
- -.hn 2
- -Can you break the copy protection scheme?
- -.pg
- -Moving right along, let's assume your store
- -bought program is copy protected, and you'd really like
- -to make a backup copy. You know this nine-year-old whiz
- -who can crack any copy-protection scheme faster than you
- -can rearrange a Rubix cube. Is there a copyright
- -violation if he succeeds? There's room to argue here.
- -When you try to figure out if something is an
- -infringement, ask yourself, what exclusive right am I
- -violating? In this case, not the right to make copies,
- -and not the right to distribute copies. Public
- -performance and display have no relevance. So the key
- -question is whether you are making a
- -.i "derivative work" .
- -My answer to that question is, \*(lqI doubt it.\*(rq On the
- -other hand, I also doubt that breaking the protection
- -scheme was \*(lqan essential step\*(rq in using the program in
- -conjunction with a machine. It might be a \*(lqfair use,\*(rq
- -but that will have to wait for another article. Anyone
- -interested in stretching the limits of the \*(lqfair use\*(rq
- -defense should read the Sony
- -.i Betamax
- -case.
- -.hn 2
- -Summary
- -.pg
- -Let me summarize. Copyright means the
- -copyright owner has the exclusive right to do certain
- -things. Copyright infringement means you did one of
- -those exclusive things (unless you did it within the
- -limits of the Software Act, i.e., as an essential step ....).
- -.hn 1
- -Copyright Sounds Neat -- How Do I Get One? Or, How Do I Know if this Program is Copyrighted?
- -.hn 2
- -How do you get a copyright?
- -.pg
- -If you've written an original program, what do you have to do to get a
- -copyright? Nothing. You already have one.
- -.hn 2
- -How do you lose a copyright?
- -.pg
- -If you've written an original
- -program, what do you have to do to lose your copyright
- -protection? Give copies away without the copyright
- -notice.
- -.hn 2
- -How do you waste a stamp?
- -.pg
- -If you mail the program to yourself
- -in a sealed envelope, what have you accomplished?
- -You've wasted a stamp and an envelope and burdened the
- -postal system unnecessarily.
- -.hn 2
- -Do you have to register?
- -.pg
- -Do you have to register your program
- -with the U.S. Copyright Office? No, but it's a damn
- -good idea.
- -.hn 2
- -How copyright comes into existence
- -.pg
- -Copyright protection (meaning the five
- -exclusive rights) comes into existence the moment you
- -.i fix
- -your program in a
- -.i "tangible medium" .
- -That means
- -write it down, or store it on a floppy disk, or do
- -something similar. Registration is optional. The one
- -thing you must do, however, is protect your copyright by
- -including a copyright notice on every copy of every
- -program you sell, give away, lend out, etc. If you
- -don't, someone who happens across your program with no
- -notice on it can safely assume that it is in the public
- -domain (unless he actually knows that it is not).
- -.hn 2
- -The copyright notice
- -.pg
- -The copyright notice has three parts. The
- -first can be either a c with a circle around it (\(co), or the
- -word
- -.b Copyright
- -or the abbreviation
- -.b Copr.
- -The c
- -with a circle around it is preferable, because it is
- -recognized around the world; the others are not. That's
- -incredibly important. Countries around the world have
- -agreed to recognize and uphold each others' copyrights,
- -but this world-wide protection requires the use of the c
- -in a circle. On disk labels and program packaging, use
- -the encircled c. Unfortunately, computers don't draw
- -small circles well, so programmers have resorted to a c
- -in parentheses: (c). Too bad. That has no legal
- -meaning. When you put your notice in the code and on
- -the screen, use
- -.b Copyright
- -or
- -.b Copr.
- -if you can't make a circle.
- -.pg
- -The second part of the notice is the \*(lqyear
- -of first publication of the work.\*(rq
- -.i Publication
- -doesn't mean distribution by Osborne Publishing Co. It
- -means distribution of copies of the program to the
- -public \*(lqby sale or other transfer of ownership, or by
- -rental, lease, or lending.\*(rq So when you start handing
- -out or selling copies of your precious code, you are
- -publishing. Publication also takes place when you
- -merely OFFER to distribute copies to a group for further
- -distribution. Your notice must include the year that
- -you first did so.
- -.pg
- -The third part of the notice is the name of
- -the owner of the copyright. Hopefully, that's you, in
- -which case your last name will do. If your company owns
- -the program -- a legal issue which I will address later
- -in this article -- the company name is appropriate.
- -.pg
- -Where do you put the notice? The general
- -idea is to put it where people are likely to see it.
- -Specifically, if you're distributing a human-readable
- -code listing, put it on the first page in the first few
- -lines of code, and hard code it so that it appears on
- -the title screen, or at sign-off, or continuously. If
- -you're distributing machine-readable versions only, hard
- -code it. As an extra precaution, you should also place
- -the notice on the gummed disk label or in some other
- -fashion permanently attached to the storage medium.
- -.hn 2
- -Advantages of registration
- -.pg
- -Now, why register the program? If no one
- -ever rips off your program, you won't care much about
- -registration. If someone does rip it off, you'll kick
- -yourself for not having registered it. The reason is
- -that if the program is registered before the
- -infringement takes place, you can recover some big bucks
- -from the infringer, called statutory damages, and the
- -court can order the infringer to pay your attorneys
- -fees. Registration only costs $10.00, and it's easy to
- -do yourself. The only potential disadvantage is the
- -requirement that you deposit the first and last 25 pages
- -of your source code, which can be inspected (but not
- -copied) by members of the public.
- -.hn 2
- -A test to see if you understand this article
- -.pg
- -Now, someone tell me this: is this article copyrighted? Can you print it?
- -.hn 1
- -Who Owns The Program You Wrote?
- -.hn 2
- -Introduction
- -.pg
- -The starting point of this analysis is that if you wrote
- -the program, you are the author, and copyright belongs
- -to the author. HOWEVER, that can change instantly.
- -There are two common ways for your ownership to shift to
- -someone else: first, your program might be a \*(lqwork for
- -hire.\*(rq Second, you might sell or assign your
- -.i rights
- -in the program, which for our purposes means the
- -copyright.
- -.hn 2
- -Programs written as an employee
- -.pg
- -Most of the programs which you write at
- -work, if not all of them, belong to your employer.
- -That's because a program prepared by an employee within
- -the scope of his or her employment is a \*(lqwork for hire,\*(rq
- -and the employer is considered the
- -.i author .
- -This is more or less automatic if you are an employee -- no
- -written agreement is necessary to make your employer the
- -copyright owner. By contrast, if you can convince your
- -employer to let you be the copyright owner, you must
- -have that agreement in writing.
- -.pg
- -By the way, before you give up hope of
- -owning the copyright to the program you wrote at work,
- -figure out if you are really an employee. That is
- -actually a complex legal question, but I can tell you
- -now that just because your boss says you are an employee
- -doesn't mean that it's so. And remember that if you
- -created the program outside the
- -.i scope
- -of your job, the
- -program is not a \*(lqwork for hire.\*(rq Finally, in
- -California and probably elsewhere, the state labor law
- -provides that employees own products they create on
- -their own time, using their own tools and materials.
- -Employment contracts which attempt to make the employer
- -the owner of those off-the-job
- -.i inventions
- -are void, at least in sunny California.
- -.hn 2
- -Programs written as a contractor
- -.pg
- -Wait a minute: I'm an independent
- -contractor to Company X, not an employee. I come and go
- -as I please, get paid by the hour with no tax withheld,
- -and was retained to complete a specific project. I
- -frequently work at home with my own equipment. Is the
- -program I'm writing a \*(lqwork for hire,\*(rq owned by the
- -Company? Maybe, maybe not. In California, this area is
- -full of landmines for employers, and gold for
- -contractors.
- -.pg
- -A contractor's program is not a \*(lqwork for
- -hire,\*(rq and is not owned by the company, unless (1) there
- -is a written agreement between the company and the
- -contractor which says that it is, and (2) the work is a
- -.i "commissioned work" .
- -A
- -.i "commissioned work"
- -is one of
- -the following: (a) a contribution to a
- -.i "collective work" ,
- -(b) an audiovisual work (like a movie, and maybe like a video game),
- -(c) a translation, (d) a compilation, (e) an instructional text,
- -(f) a test or answer to a test, or (g) an atlas. I know you must be
- -tired of definitions, but this is what the real legal
- -world is made of. An example of a collective work is a
- -book of poetry, with poems contributed by various
- -authors. A piece of code which is incorporated into a
- -large program isn't a contribution to a collective work,
- -but a stand-alone program which is packaged and sold
- -with other stand-alone programs could be.
- -.pg
- -So where are we? If you are a contract
- -programmer, not an employee, and your program is a
- -.i "commissioned work" ,
- -and you have a written agreement
- -that says that the program is a \*(lqwork for hire\*(rq owned by
- -the greedy company, who owns the program? That's right,
- -the company. But guess what? In California and
- -elsewhere the company just became your employer! This
- -means that the company must now provide worker's
- -compensation benefits for you
- -.b "AND UNEMPLOYMENT INSURANCE" .
- -.hn 1
- -A Brief Word About Licenses.
- -.hn 2
- -Why a license?
- -.pg
- -When you get software at the local five and dime, the
- -manufacturer claims that you have a license to use that
- -copy of the program. The reason for this is that the
- -manufacturer wants to place more restrictions on your
- -use of the program than copyright law places. For
- -example, licenses typically say you can only use the
- -program on a single designated CPU. Nothing in the
- -copyright law says that. Some licenses say you cannot
- -make an archive copy. The copyright law says you can,
- -remember? But if the license is a valid license, now
- -you can't. You can sell or give away your copy of a
- -program if you purchased it, right? That's permitted by
- -copyright law, but the license may prohibit it. The
- -more restrictive terms of the license will apply instead
- -of the more liberal copyright rules.
- -.hn 2
- -Is it valid?
- -.pg
- -Is the license valid? This is hotly debated
- -among lawyers. (What isn't? We'll argue about the time
- -of day.) A few states have passed or will soon pass
- -laws declaring that they are valid. A few will go the
- -other way. Federal legislation is unlikely. My
- -argument is that at the consumer level, the license is
- -not binding because there is no true negotiation (unless
- -a state law says it is binding), but hey that's just an
- -argument and I'm not saying that that's the law. In any
- -case, I think businesses which buy software will be
- -treated differently in court than consumers. Businesses
- -should read those licenses and negotiate with the
- -manufacturer if the terms are unacceptable.
- -.hn 1
- -I Have A Neat Idea. Can I Trademark It? What About patent?
- -.hn 2
- -Trademark law explained
- -.pg
- -Sorry, no luck. Trademark law protects names: names of
- -products and names of services. (Note that I did not
- -say names of companies. Company names are not
- -trademarkable.) If you buy a program that has a
- -trademarked name, all that means is that you can't sell
- -your own similar program under the same name. It has
- -nothing to do with copying the program.
- -.hn 2
- -Patent Law
- -.pg
- -Patent law can apply to computer programs,
- -but it seldom does. The main reasons it seldom applies
- -are practical: the patent process is too slow and too
- -expensive to do much good in the software world. There
- -are also considerable legal hurdles to overcome in order
- -to obtain a patent. If, by chance, a program is
- -patented, the patent owner has the exclusive right to
- -make, use or sell it for 17 years.
- -.hn 1
- -CONCLUSION
- -.pg
- -I know this is a long article,
- -but believe it or not I just scratched the surface.
- -Hopefully, you'll find this information useful, and
- -you'll stop passing along myths about copyright law. If
- -anyone needs more information, I can be reached at the
- -address on the first page.
- -Sorry, but I do not usually have
- -access to the network, so you can't reach me there.
- -.sp
- -Thank you. JORDAN J. BRESLOW
- *-*-END-of-doc/copyright.mn-*-*
- sed 's/.//' >doc/patchlevel.doc <<'*-*-END-of-doc/patchlevel.doc-*-*'
- 0
- *-*-END-of-doc/patchlevel.doc-*-*
- exit
-
-